package com.ruoyi.product.controller;

import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.market.domain.dto.SkuCouponsCategoryDto;
import com.ruoyi.product.domain.ProductActivity;
import com.ruoyi.product.domain.ProductActivityGroup;
import com.ruoyi.product.domain.dto.*;
import com.ruoyi.product.mapper.ProductActivityMapper;
import com.ruoyi.product.service.IProductActivityService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 活动Controller
 *
 * @author liuhuizhong
 * @date 2025-08-13
 */
@RestController
@RequestMapping("/web/activity")
@Tag(name = "活动管理接口", description = "提供活动操作")
public class ProductActivityController extends BaseController {
    @Autowired
    private IProductActivityService productActivityService;
    @Autowired
    private ProductActivityMapper productActivityMapper;

    /**
     * 查询首页轮播图列表
     */
    @GetMapping("/carouselList")
    @Operation(summary = "首页轮播图列表", description = "")
    public TableDataInfo carouselList() {
        List<ProductActivity> list = productActivityService.selectProductActivityList(null);
        return getDataTable(list);
    }

    /**
     * 根据活动id获取获取活动信息
     */
    @GetMapping(value = "/{activityId}")
    @Operation(summary = "根据活动id获取获取活动信息", description = "传入活动ID，返回活动详细信息")
    public AjaxResult getInfo(@PathVariable("activityId") Long activityId) {
        return success(productActivityService.selectProductActivityByActivityId(activityId));
    }

    /**
     * 获取活动列表
     */
    @GetMapping("/list")
    @Operation(summary = "获取活动列表", description = "传入活动参数，返回活动列表")
    public AjaxResult list(ActivityDto activityDto) {
        List<ActivityDto> list = productActivityService.selectActivityList(activityDto);
        return success(list);
    }

    /**
     * 根据活动组id获取销量最高的前8个商品
     */

    @PostMapping("/saleTop8")
    @Operation(summary = "根据活动组id获取销量最高的前8个商品", description = "传入活动组ID和分页信息，返回销量最高商品和分页信息")
    public AjaxResult saleTop8(@RequestBody ActivitySaleTopRequestDto request) {
        ActivitySaleTopResponseDto response = productActivityService.saleTop8WithPagination(
                request.getActivityGroupId(),
                request.getPagination());
        return success(response);
    }

    /**
     * 根据活动组id获取分类商品列表
     */
    @Operation(summary = "根据活动组id获取分类商品列表", description = "传入活动组 ID，返回分类商品列表")
    @PostMapping("/activityCategoryList")
    public AjaxResult activityCategoryList(@RequestParam Long activityGroupId) {
        List<SkuCouponsCategoryDto> list = productActivityService.getActivityCategoryList(activityGroupId);
        return success(list);
    }

    /**
     * 根据分类id和活动id获取不同页数的商品记录
     */
    @Operation(summary = "根据分类id和活动id获取不同页数的商品记录", description = "传入分类id和活动id，返回不同页数的商品记录")
    @PostMapping("/activityCategoryListPage")
    public AjaxResult activityCategoryListPage(@RequestBody SkuActivityCategoryRequestDto request) {
        List<SkuCouponsCategoryDto> list = productActivityService.getActivityCategoryListPage(request);
        return success(list);
    }

    /**
     * 获取所有活动信息
     */
    @GetMapping("/getAllActivity")
    @Operation(summary = "获取所有活动信息", description = "返回所有活动信息")
    public AjaxResult getAllActivity() {
        List<ProductActivityGroup> list = productActivityService.getAllActivity();
        return success(list);
    }

    /**
     * 获取所有活动销量最高的前8个商品
     */
    @Operation(summary = "获取所有活动销量最高的前8个商品", description = "传入分页信息，返回所有活动销量最高的商品和分页信息")
    @PostMapping("/getAllActivitySaleTop8")
    public AjaxResult getAllActivitySaleTop8(@RequestBody AllActivitySaleTopRequestDto request) {
        AllActivitySaleTopResponseDto response = productActivityService
                .getAllActivitySaleTop8WithPagination(request.getPagination());
        return success(response);
    }

    /**
     * 获取所有活动分类商品列表
     */
    @Operation(summary = "获取所有活动分类商品列表", description = "根据活动分类获取商品列表，支持分页")
    @GetMapping("/getAllActivityCategorySkus")
    public AjaxResult getAllActivityCategorySkus() {
        List<SkuActivityCategoriesDto> list = productActivityService.getAllActivityCategorySkus();
        return success(list);
    }

    /**
     * 根据活动组id获取不同页数的商品记录
     */
    @Operation(summary = "根据活动组id获取不同页数的商品记录", description = "传入活动组id和分页信息，返回不同页数的商品记录")
    @GetMapping("/activityPage")
    public AjaxResult activityPage(@RequestBody ActivityPageRequestDto request) {
        List<SkuCouponsCategoryDto> list = productActivityService.getActivityPage(request);
        return success(list);
    }

    /**
     * 根据活动组id获取获取活动组信息
     */
    @Operation(summary = "根据活动组id获取获取活动组信息", description = "传入活动组ID，返回活动组详细信息")
    @GetMapping("/getActivityGroup")
    public AjaxResult getActivityGroup(@RequestParam Long id) {
        return success(productActivityMapper.getActivityGroup(id));
    }

}
